// 如果改写成尾递归，只保留一个调用记录，复杂度 O(1) 。
function factorial(n, total) {
    if (n === 1) return total;
    return factorial(n - 1, n * total);
}

factorial(5, 1) // 120
//蹦床函数（trampoline）可以将递归执行转为循环执行。
function trampoline(f) {
    while (f && f instanceof Function) {
        f = f();
    }
    return f;
}


var missingNumber = function (nums) {
    let missing = nums.length
    for (let i = 0; i < nums.length; i++) {//相同的数异或为0
        missing = missing ^ nums[i] ^ (i)
        // console.log(missing, 'miss');
    }
    return missing
}

console.log(missingNumber.call(this, [1, 2, 0]))
console.log(missingNumber([1, 3, 0]));


console.log(new Date(...[2015, 1, 1]), 'Date');
// console.log(new (Date.bind.apply(Date, [null, 2015, 1, 1])));//对的
// console.log(new (Date.apply(null, [2015, 1, 1])))//为社么不能写成下面这个

let str = 'x\uD83D\uDE80y';

console.log(str.split(''));//这个相当于是没有空隙[ 'x', '\ud83d', '\ude80', 'y' ]
console.log(str.split(' '));//这个是空格[ 'x🚀y' ]
console.log(str);

console.log(parseInt(1.9));